
//void qsort(void*base, //指针指向的是待排序数组的第一个元素
//		   size_t sum ,//base指向数组元素的个数
//		   size_t size,int //数组元素的大小单位是字节
//		   int (*compare)(const void*,const void*))//函数指针，指向的是俩个元素的比较函数
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void my_print(int arr[],int sz)
{
	int i =0;
	for(i;i<sz;i++)
	{
		printf("%d",arr[i]);
	}
}
//
//int my_compar(const void*p1,const void*p2)
//{
//	return *(int*)p1-*(int*)p2;
//	
//}
//
//void test()
//{
//	int arr[] ={9,8,7,6,5,4,3,2,1,0};
//	qsort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(arr[0]),my_compar);
//	my_print(arr,sizeof(arr)/sizeof(arr[0]));
//	
//}
//int main()
//{
//	test();
//	
//	
//	
//	return 0;
//}
//struct Stu
//{
//	char name[20];
//	int age;
//};
////用年龄来排序
//int cmp_age(const void*p1,const void*p2)
//{
//	return ((struct Stu*)p1)->age-((struct Stu*)p2)->age;
//}
////用名字进行比较
//int cma_name(const void*p1,const void*p2)
//{
//	return strcmp(((struct Stu*)p1)->name,((struct Stu*)p2)->name);
//}
//
//int main()
//{
//	struct Stu arr[3]={{"zhangsan",50},{"lishi",19},{"wangwu",42}};
//	int sz =sizeof(arr)/sizeof(arr[0]);
//	qsort(arr,sz,sizeof(arr[0]),cma_name);
//	
//	return 0;
//}
int my_compar(const void*p1,const void*p2)
{
	return *(int*)p1-*(int*)p2;
}

void bubble_sort(void*arr,int sz,int width,int (*my_compar)(const void*p1,const void*p2))
{
    int i = 0;
	for(i=0; i < sz-1;i++)
	{
		for(int j =0;j< sz-1-i;j++)
		{
			if(my_compar((char*)arr+(j*width),(char*)arr+(j+1)*width)>0)
			{
				for (int a=0;a<width;a++)
				{
					char str =*((char*)arr+j*width+a);
					*((char*)arr+j*width+a)=*((char*)arr+(j+1)*width+a);
					*((char*)arr+(j+1)*width+a)=str;
					
				}
			}
		}
	}

}
void test()
{
	int arr[] ={9,8,7,6,5,4,3,2,1,0};
	bubble_sort(arr,sizeof(arr)/sizeof(arr[0]),sizeof(arr[0]),my_compar);
	my_print(arr,sizeof(arr)/sizeof(arr[0]));
	
}
int main()
{
	test();
	
	
	
	return 0;
}
